package java基础.java类的加载顺序;

/**
 * Created by Administrator on 2017/8/16.
 */
//不会引动类初始化的三种情况(静态变量，常量，数组)：
// 1、子类调用父类的静态变量，子类不会被初始化。只有父类被初始化。对于静态字段，只有直接定义这个字段的类才会被初始化.
// 2、通过数组定义来引用类，不会触发类的初始化
// 3、访问类的常量，不会初始化类
public class ThreeNoInitialization {
    public static void main(String[] args) {
        System.out.println(SubClass.value);// 被动应用1(调用父类静态变量)
        System.out.println("----------------------------");
        SubClass[] sca = new SubClass[10];// 被动引用2(类作为数组元素类型)
        System.out.println("----------------------------");
        System.out.println(ConstClass.HELLOWORLD);// 被动引用3(调用类常量)
    }
}
/*     运行结果：
       superclass init
       123
----------------------------
----------------------------
        hello world
*/
// 被动应用1(调用父类静态变量)
class SuperClass {
    static {
        System.out.println("superclass init");
    }
    public static int value = 123;
}
// 被动引用2(类作为数组元素类型)
class SubClass extends SuperClass {
    static {
        System.out.println("subclass init");
    }
}
// 被动引用3(调用类常量)
class ConstClass {
    static {
        System.out.println("ConstClass init");
    }
    public static final String HELLOWORLD = "hello world";
}